1
장난감 데이터셋에서 실제 세계의 혼란까지
EvoClass-AI002강의 5
00:00

1. 간극을 메우기: 데이터 로딩의 핵심 원리

딥러닝 모델은 깨끗하고 일관된 데이터에서 잘 작동하지만, 실제 세계의 데이터셋은 본질적으로 혼잡합니다. 우리는 미니언트 같은 사전 구축된 벤치마크에서 시작해, 데이터 로딩 자체가 복잡한 조율 작업이 되는 비구조적 소스를 관리하는 방식으로 전환해야 합니다. 이 과정의 기초는 파이토치(PhyTorch)의 특수한 데이터 관리 도구에 있습니다.

핵심 과제는 디스크에 저장된 원시이고 산만한 데이터(이미지, 텍스트, 오디오 파일 등)를 고도로 정리되고 표준화된 파이토치 텐서 형식GPU에서 기대하는 형식으로 변환하는 것입니다. 이를 위해 인덱싱, 로딩, 전처리 및 최종적으로 배치 처리를 위한 사용자 정의 로직이 필요합니다.

실제 세계 데이터의 주요 도전 과제

  • 데이터 혼란:여러 디렉터리에 흩어져 있으며, 종종 단일 CSV 파일로만 인덱싱되는 경우가 많습니다.
  • 사전 처리 필요:이미지는 텐서로 변환하기 전에 크기 조절, 정규화 또는 증강 처리가 필요할 수 있습니다.
  • 효율성 목표:데이터는 최적화된 비차단 배치 형태로 GPU에 제공되어야 하며, 이를 통해 학습 속도를 극대화해야 합니다.
파이토치의 해결책: 책임 분리하기
파이토치는 책임 분리를 강제합니다: Dataset은 "무엇을 할 것인가"(단일 샘플과 레이블에 접근하는 방법)를 담당하며, DataLoader은 "어떻게 할 것인가"(효율적인 배치 처리, 섞기, 다중 스레드 전달)를 담당합니다.
data_pipeline.py
터미널bash — data-env
> 준비 완료. 실행하려면 "실행"을 클릭하세요.
>
텐서 감시기실시간

코드를 실행하여 활성 텐서를 확인하세요.
질문 1
파이토치 Dataset 객체의 주요 역할은 무엇입니까?
샘플을 미니배치로 정렬하고 섞는 것입니다.
단일 사전 처리된 샘플을 가져오는 로직을 정의하는 것입니다.
모델 내부에서 행렬 곱셈을 수행하는 것입니다.
질문 2
어떤 DataLoader매개변수는 여러 개의 CPU 코어를 사용해 데이터를 병렬로 로딩할 수 있게 합니까?
device_transfer
batch_size
num_workers
async_load
질문 3
원본 이미지들이 모두 다른 크기라면, 어떤 구성 요소가 주로 그들을 동일한 차원(예: $224 \times 224$)으로 리사이징하는 책임을 지닙니까?
DataLoader의 collate_fn.
GPU의 전용 이미지 프로세서입니다.
Dataset의 __getitem__메서드 내에서 적용되는 전환 함수입니다.
도전 과제: 커스텀 이미지 로더 설계도
실제 세계의 이미지 분류에 필요한 구조를 정의하세요.
당신은 CustomDataset라는 이름의 데이터셋을 만들고 있습니다. 이 데이터셋은 경로와 레이블을 포함한 단일 CSV 파일로 10,000개의 이미지를 인덱싱합니다.
단계 1
총 샘플 수를 반환해야 하는 필수 메서드는 무엇입니까?
해답:
__len__메서드 내에서 적용되는 전환 함수입니다.
Concept: Defines the epoch size.
단계 2
내부에서 올바른 작업 순서는 무엇입니까? __getitem__(self, index)?
해답:
1. 인덱스를 사용해 파일 경로를 찾습니다.index.
2. 원시 데이터(예: 이미지)를 로드합니다.
3. 필요한 transforms.
4. 처리된 텐서와 레이블을 반환합니다.